/**
 * 功能类
 */
(function(){
    var localStorage = window.localStorage, location = window.location, console = window.console;
    
    //hash分割字符串
    var hash_split_char = '/';
    
    /**
     * 功能类
     */
    var JFuns = function(){
    
    };
    
    /**
     * 本地存储
     */
    JFuns.prototype.storage = {
        /**
         * 检测当前浏览器是否支持本地存储
         * @return {Boolean} true表示支持
         */
        supported: function(){
            return localStorage ? true : false;
        },
        
        /**
         * 根据存储名获取存储值
         * @param {String} key	存储名
         * @return {String} 存储值，没有存储值返回null
         */
        get: function(key){
            if (!this.supported) 
                return;
            return localStorage.getItem(key);
        },
        
        /**
         * 添加本地存储
         * @param {String} key	存储名
         * @param {Object} value	存储值
         */
        set: function(key, vlaue){
            if (!this.supported) 
                return;
            localStorage.setItem(key, vlaue);
        },
        
        /**
         * 根据存储名移除存储值
         * @param {String} key	存储名
         */
        del: function(key){
            if (!this.supported) 
                return;
            localStorage.removeItem(key);
        },
        
        /**
         * 清空本地存储
         */
        clear: function(key){
            if (!this.supported) 
                return;
            localStorage.clear();
        }
    };
    
    /**
     * 页面url
     */
    JFuns.prototype.url = {
        /**
         * 获取hash值
         * @param {String} hash_str	hash来源字符串，如果没有定义则获取当前页面的hash
         * @return {Array}	返回hash数组，如果没有获取到hash则数组为空
         */
        getHash: function(hash_str){
            hash_str = hash_str || location.hash;
            var tmp = [], params = hash_str.split(hash_split_char), tmp1;
            for (var p in params) {
                tmp1 = params[p].split('=');
                if (tmp1.length == 2) {
                    tmp[tmp1[0]] = tmp1[1];
                }
            }
            return tmp;
        },
        
        /**
         * 设置hash值
         * @param {Array} args	hash参数
         */
        setHash: function(args){
            var hash_str = hash_split_char;
            if (!$.isArray(args)) 
                return;
            for (var i in args) {
                var arg = encodeURIComponent(args[i]);
                hash_str += i + '=' + arg + hash_split_char;
            }
            location.hash = hash_str;
        },
        
        /**
         * 获取url参数值
         * @param {String} url	只能含有参数
         * @param {String} key	参数名
         * @return {String} 返回查找到的参数值
         */
        getParam: function(url, key){
            var reg = new RegExp("(\\?|&)" + key + "=([^&]+)(&|$)", "i")
            var m = url.match(reg);
            if (!m) 
                return '';
            return m[2];
        },
        
        /**
         * 设置url参数值
         * @param {String} url	只能含有参数
         * @param {String} key	参数名
         * @param {String} value	参数值
         * @return {String} 返回新的url
         */
        setParam: function(url, key, value){
            var reg = new RegExp("(\\?|&)" + key + "=([^&]+)(&|$)", "i")
            var m = url.match(reg);
            if (m) {
                return url.replace(reg, function($0, $1, $2){
                    return $0.replace($2, value);
                });
            }
            else {
                if (url.indexOf('?') == -1) {
                    return url + '?' + key + '=' + value;
                }
                else {
                    return url + '&' + key + '=' + value;
                }
            }
        }
    };
    
    /**
     * 打印日志
     * @param {Object} text
     */
    JFuns.prototype.log = function(text){
        console.log && console.log(text);
    };
    
    /**
     * 发送请求，gdp
     * @param {String} url	请求的图片地址
     * @param {String} params	请求的附加参数
     */
    JFuns.prototype.stat = function(url, params){
        url = url + '?';
        var t = new Date().getTime();
        var obj = document.getElementById('stat');
        if (!obj) {
            obj = document.createElement('img');
            obj.style.display = 'none';
            obj.id = 'stat';
            document.body.appendChild(obj);
        }
        obj.src = url + params + '&t=' + t;
    };
    
    /**
     * html
     */
    JFuns.prototype.html = {
        /**
         * html特殊符号编码
         * @param {String} str	要编码的html字符串
         * @return 编码后的html字符串
         */
        encode: function(str){
            if (!str) 
                return str;
            str = str.replace(/&/g, '&amp;');
            str = str.replace(/</g, '&lt;');
            str = str.replace(/>/g, '&gt;');
            str = str.replace(/ /g, '&nbsp;');
            str = str.replace(/\'/g, '&#39;');
            str = str.replace(/\"/g, '&quot;');
            return str;
        },
        
        /**
         * html特殊符号解码
         * @param {String} str	要解码的字符串
         * @return {String} 解码后的字妇产
         */
        decode: function(str){
            if (!str) 
                return;
            str = str.replace(/&amp;/g, '&');
            str = str.replace(/&lt;/g, '<');
            str = str.replace(/&gt;/g, '>');
            str = str.replace(/&nbsp;/g, ' ');
            str = str.replace(/&#39;/g, '\'');
            str = str.replace(/&quot;/g, '\"');
            return str;
        }
    };
    
    /**
     * 功能类实例
     */
    window.jFuns = new JFuns();
})();
